#include "edge.h"
#include <cstdlib>
#include <ctime>
#include <algorithm>
#include <cmath> // 加入支持 exp 函数

Edge::Edge(Vertex* s, Vertex* e, double len)
    : start(s), end(e), length(len)
{
    // 1. 设置容量
    capacity = std::max(1, static_cast<int>(len / 5.0));

    // 2. 初始化随机数种子（仅初始化一次）
    static bool seedInitialized = false;
    if (!seedInitialized) {
        std::srand(static_cast<unsigned>(std::time(nullptr)));
        seedInitialized = true;
    }

    // 3. 生成当前车数（最大为 length / 3）
    int maxCar = std::max(1, static_cast<int>(length / 3.0));
    currentCar = std::rand() % (maxCar + 1);

    // 4. 通行时间模型参数
    const double c = 1.0; // 可调常数系数
    double ratio = static_cast<double>(currentCar) / capacity;
    double f = 1.0;

    // 5. 使用分段函数 f(x)
    if (ratio > 1.0) {
        f = 1.0 + std::exp(ratio);
    }

    // 6. 计算通行时间
    trafficTime = c * length * f;

    // 7. 同时可设置 traffic = f 表示拥堵因子
    traffic = f;
}
